package com.mingshine.cloud.test;
 
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * 消息交换机配置  可以配置多个 - 每个类型要单独配置
 * @Class ExchangeConfig
 * @Author 作者姓名:LiuXing
 * @Version 1.0
 * @Date 创建时间：2019-05-20 17:02
 * @Direction 类说明
 */
//@Configuration
public class ExchangeConfig {
 
 
    /** 消息交换机的名字*/
    public static final String DIRECT_EXCHANGE = "direct_exchange";     //直连交换机
    public static final String FANOUT_EXCHANGE = "fanout_exchange";     //广播交换机
    public static final String TOPIC_EXCHANGE = "topic_exchange";       //匹配交换机
 
 
    /**
     *   TODO
     *   1.定义direct exchange，绑定直连队列【RabbitMqConfig.DIRECT_EXCHANGE】到路由器
     *   2.durable="true" rabbitmq重启的时候不需要创建新的交换机
     *   3.direct交换器相对来说比较简单，匹配规则为：如果路由键匹配，消息就被投送到相关的队列
     *     fanout交换器中没有路由键的概念，他会把消息发送到所有绑定在此交换器上面的队列中。
     *     topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
     *   key: queue在该direct-exchange中的key值，当消息发送给direct-exchange中指定key为设置值时，
     *   消息将会转发给queue参数指定的消息队列
     */
    @Bean
    public DirectExchange directExchange(){
        DirectExchange directExchange = new DirectExchange( ExchangeConfig.DIRECT_EXCHANGE,true,false);
        return directExchange;
    }
 
    /**
     *   TODO
     *   1.定义fanout exchange，绑定广播队列【RabbitMqConfig.FANOUT_EXCHANGE】到路由器
     *   2.durable="true" rabbitmq重启的时候不需要创建新的交换机
     *   3.direct交换器相对来说比较简单，匹配规则为：如果路由键匹配，消息就被投送到相关的队列
     *     fanout交换器中没有路由键的概念，他会把消息发送到所有绑定在此交换器上面的队列中。
     *     topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
     *   key: queue在该fanout-exchange中的key值，当消息发送给fanout-exchange中指定key为设置值时，
     *   消息将会转发给注册在【RabbitMqConfig.FANOUT_EXCHANGE】这个交换机上面的所有的queue参数指定的消息队列
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        FanoutExchange fanoutExchange = new FanoutExchange( ExchangeConfig.FANOUT_EXCHANGE,true,false);
        return fanoutExchange;
    }
 
 
 
    /**
     *   TODO
     *   1.定义topic exchange，绑定广播队列【RabbitMqConfig.TOPIC_EXCHANGE】到路由器
     *   2.durable="true" rabbitmq重启的时候不需要创建新的交换机
     *   3.direct交换器相对来说比较简单，匹配规则为：如果路由键匹配，消息就被投送到相关的队列
     *     fanout交换器中没有路由键的概念，他会把消息发送到所有绑定在此交换器上面的队列中。
     *     topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
     *   key: queue在该topic-exchange中的key值，当消息发送给topic-exchange中指定key为设置值时，
     *   消息将会转发给注册在【RabbitMqConfig.TOPIC_EXCHANGE】规则匹配的queue参数指定的消息队列
     */
    @Bean
    public TopicExchange topicExchange(){
        TopicExchange topicExchange = new TopicExchange( ExchangeConfig.TOPIC_EXCHANGE,true,false);
        return topicExchange;
    }
 
}